package Utils;

import Modelo.*;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Types;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class ExportTabular {
    /**
     * exportar datos de persona
     */
    public static boolean doExportarPersonaPOI(String nombre_archivo){
        boolean a=false; 
         Connection conexion = null;
        ResultSet rs = null;       
        try{
                            conexion = ControladorBD.darConexionBD();
                            conexion.setAutoCommit(false);       
                            CallableStatement st = conexion.prepareCall
                                        ( "{call sp_listarPersonaTodos()}");    
                            rs = st.executeQuery();        
                            if(rs.next()){
                             try
                            {
                //Se crea el libro Excel
                    Workbook workbook = new XSSFWorkbook();
                //Se crea una nueva hoja dentro del libro                        
                    Sheet worksheet = workbook.createSheet("PERSONA");
                    CreationHelper createHelper = workbook.getCreationHelper();
                    worksheet.autoSizeColumn((short) 0);                    
                    CellStyle cabeceraFont = workbook.createCellStyle();
                    cabeceraFont.setFillForegroundColor(IndexedColors.GOLD.getIndex());
		    cabeceraFont.setFillPattern(CellStyle.SOLID_FOREGROUND);
                    cabeceraFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cabeceraFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cabeceraFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderRight(CellStyle.BORDER_THIN);
                    cabeceraFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderTop(CellStyle.BORDER_THIN);
                    cabeceraFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setAlignment(CellStyle.ALIGN_CENTER);
                    cabeceraFont.setVerticalAlignment(CellStyle.ALIGN_CENTER);
                    Font  font = workbook.createFont();
                    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                    font.setFontName("Arial");
                    font.setItalic(true);
                    font.setFontHeightInPoints((short)10);
                    cabeceraFont.setFont(font);
                    cabeceraFont.setWrapText(true);
                            //new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
                    CellStyle cuerpoFont = workbook.createCellStyle();
                    cuerpoFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    CellStyle cuerpoFontDate = workbook.createCellStyle();
                    cuerpoFontDate.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
                    Row row1 = worksheet.createRow(0);                    
                    Cell cellA1 = row1.createCell(0);
                    cellA1.setCellValue("Codigo");
                    cellA1.setCellStyle(cabeceraFont);
                    Cell cellB1 = row1.createCell(1);
                    cellB1.setCellValue("Apellido Paterno");
                    cellB1.setCellStyle(cabeceraFont);  
                    Cell cellBB1 = row1.createCell(2);
                    cellBB1.setCellValue("Apellido Materno");
                    cellBB1.setCellStyle(cabeceraFont);
                    Cell cellC1 = row1.createCell(3);
                    cellC1.setCellValue("Nombre");
                    cellC1.setCellStyle(cabeceraFont);     
                    Cell cellD1 = row1.createCell(4);
                    cellD1.setCellValue("Genero");
                    cellD1.setCellStyle(cabeceraFont); 
                  
                    int i=1;
                           do{
                                Row rows = worksheet.createRow(i);                                
                                Cell cellA = rows.createCell(0);                                
                                cellA.setCellValue(createHelper.createRichTextString(rs.getString("codigoPersona")));
                                cellA.setCellStyle(cuerpoFont);
                                Cell cellB = rows.createCell(1);
                                cellB.setCellValue(createHelper.createRichTextString(rs.getString("paternoPersona")));
                                cellB.setCellStyle(cuerpoFont);  
                                Cell cellC = rows.createCell(2);
                                cellC.setCellValue(createHelper.createRichTextString(rs.getString("maternoPersona")));
                                cellC.setCellStyle(cuerpoFont);
                                Cell cellD = rows.createCell(3);
                                cellD.setCellValue(createHelper.createRichTextString(rs.getString("nombrePersona")));
                                cellD.setCellStyle(cuerpoFont);     
                                Cell cellE = rows.createCell(4);
                                cellE.setCellValue(createHelper.createRichTextString(rs.getString("generoPersona")));
                                cellE.setCellStyle(cuerpoFont); 
                               
                                worksheet.setColumnWidth(0, 8000);//codigo
                                worksheet.setColumnWidth(1, 8000);//apellido paterno
                                worksheet.setColumnWidth(2, 8000);//apellido materno
                                worksheet.setColumnWidth(3, 8000);//nombre
                                worksheet.setColumnWidth(4, 8000);//genero
                                
                                i++;  
                                
                               }while(rs.next());
                               String ruta=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/")+System.getProperty("file.separator")+"download"+System.getProperty("file.separator") + nombre_archivo;                               
                                File archi = new File(ruta);                
                                DataOutputStream out = new DataOutputStream(new FileOutputStream(archi));
                                workbook.write(out); 
                                out.close();                       
                                a=true;
                  
                        }
                             catch (FileNotFoundException e)
                                {
                              System.out.println("Error al crear el fichero." + e.getMessage());
                                 }
                             catch (IOException e)
                              {
                             System.out.println("Error al escribir el fichero."+ e.getMessage());
                          }
                      }
                 st.close();
                  conexion.setAutoCommit(true);
                 conexion.close();
                   
                            }catch(Exception error){
                            System.out.println("Error en el acceso a BD: " + error.getMessage());
                            error.printStackTrace();
                            }
                            
        
        return true;
    }
    
    /**
     * exportar datos de persona
     */
    public static boolean doExportarProducoPOI(String nombre_archivo){
        boolean a=false; 
         Connection conexion = null;
        ResultSet rs = null;       
        try{
                            conexion = ControladorBD.darConexionBD();
                            conexion.setAutoCommit(false);       
                            CallableStatement st = conexion.prepareCall
                                        ( "{call sp_listarProducto()}");    
                            rs = st.executeQuery();        
                            if(rs.next()){
                             try
                            {
                //Se crea el libro Excel
                    Workbook workbook = new XSSFWorkbook();
                //Se crea una nueva hoja dentro del libro                        
                    Sheet worksheet = workbook.createSheet("PRODUCTO");
                    CreationHelper createHelper = workbook.getCreationHelper();
                    worksheet.autoSizeColumn((short) 0);                    
                    CellStyle cabeceraFont = workbook.createCellStyle();
                    cabeceraFont.setFillForegroundColor(IndexedColors.GOLD.getIndex());
		    cabeceraFont.setFillPattern(CellStyle.SOLID_FOREGROUND);
                    cabeceraFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cabeceraFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cabeceraFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderRight(CellStyle.BORDER_THIN);
                    cabeceraFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderTop(CellStyle.BORDER_THIN);
                    cabeceraFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setAlignment(CellStyle.ALIGN_CENTER);
                    cabeceraFont.setVerticalAlignment(CellStyle.ALIGN_CENTER);
                    Font  font = workbook.createFont();
                    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                    font.setFontName("Arial");
                    font.setItalic(true);
                    font.setFontHeightInPoints((short)10);
                    cabeceraFont.setFont(font);
                    cabeceraFont.setWrapText(true);
                            //new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
                    CellStyle cuerpoFont = workbook.createCellStyle();
                    cuerpoFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    CellStyle cuerpoFontDate = workbook.createCellStyle();
                    cuerpoFontDate.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
                    Row row1 = worksheet.createRow(0);                    
                    Cell cellA1 = row1.createCell(0);
                    cellA1.setCellValue("Codigo");
                    cellA1.setCellStyle(cabeceraFont);
                    Cell cellB1 = row1.createCell(1);
                    cellB1.setCellValue("Nombre");
                    cellB1.setCellStyle(cabeceraFont);  
                    Cell cellC1 = row1.createCell(2);
                    cellC1.setCellValue("Descripcion");
                    cellC1.setCellStyle(cabeceraFont);
                    Cell cellD1 = row1.createCell(3);
                    cellD1.setCellValue("Precio Soles");
                    cellD1.setCellStyle(cabeceraFont);     
                    Cell cellE1 = row1.createCell(4);
                    cellE1.setCellValue("Precio Dolares");
                    cellE1.setCellStyle(cabeceraFont); 
                    Cell cellF1 = row1.createCell(5);
                    cellF1.setCellValue("Stock");
                    cellF1.setCellStyle(cabeceraFont); 
                    Cell cellG1 = row1.createCell(6);
                    cellG1.setCellValue("Motivo");
                    cellG1.setCellStyle(cabeceraFont); 
                    Cell cellH1 = row1.createCell(7);
                    cellH1.setCellValue("Estado");
                    cellH1.setCellStyle(cabeceraFont); 
                    Cell cellI1 = row1.createCell(8);
                    cellI1.setCellValue("Tipo");
                    cellI1.setCellStyle(cabeceraFont);
                    
                    int i=1;
                           do{
                                Row rows = worksheet.createRow(i);                                
                                Cell cellA = rows.createCell(0);                                
                                cellA.setCellValue(createHelper.createRichTextString(rs.getString("codigoProducto")));
                                cellA.setCellStyle(cuerpoFont);
                                Cell cellB = rows.createCell(1);
                                cellB.setCellValue(createHelper.createRichTextString(rs.getString("nombreProducto")));
                                cellB.setCellStyle(cuerpoFont);  
                                Cell cellC =rows.createCell(2);
                                cellC.setCellValue(createHelper.createRichTextString(rs.getString("descripcionProducto")));
                                cellC.setCellStyle(cuerpoFont);
                                Cell cellD = rows.createCell(3);
                                cellD.setCellValue(createHelper.createRichTextString(rs.getString("precioSolesProducto")));
                                cellD.setCellStyle(cuerpoFont);     
                                Cell cellE = rows.createCell(4);
                                cellE.setCellValue(createHelper.createRichTextString(rs.getString("precioDolaresProducto")));
                                cellE.setCellStyle(cuerpoFont); 
                                Cell cellF = rows.createCell(5);
                                cellF.setCellValue(createHelper.createRichTextString(rs.getString("stockProducto")));
                                cellF.setCellStyle(cuerpoFont); 
                                Cell cellG = rows.createCell(6);
                                cellG.setCellValue(createHelper.createRichTextString(rs.getString("motivoProducto")));
                                cellG.setCellStyle(cuerpoFont); 
                                Cell cellH = rows.createCell(7);
                                cellH.setCellValue(createHelper.createRichTextString(rs.getString("estadoProducto")));
                                cellH.setCellStyle(cuerpoFont); 
                                Cell cellI = rows.createCell(8);
                                cellI.setCellValue(createHelper.createRichTextString(rs.getString("nombreTipo")));
                                cellI.setCellStyle(cuerpoFont); 
                                
                                worksheet.setColumnWidth(0, 8000);//codigo
                                worksheet.setColumnWidth(1, 8000);//apellido paterno
                                worksheet.setColumnWidth(2, 8000);//apellido materno
                                worksheet.setColumnWidth(3, 8000);//nombre
                                worksheet.setColumnWidth(4, 8000);//genero
                                worksheet.setColumnWidth(5, 8000);//pais
                                worksheet.setColumnWidth(6, 8000);//usuario
                                worksheet.setColumnWidth(7, 8000);//nivel      
                                worksheet.setColumnWidth(8, 8000);//nivel   
                                i++;  
                               }while(rs.next());
                               String ruta=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/")+System.getProperty("file.separator")+"download"+System.getProperty("file.separator") + nombre_archivo;                               
                                File archi = new File(ruta);                
                                DataOutputStream out = new DataOutputStream(new FileOutputStream(archi));
                                workbook.write(out); 
                                out.close();                       
                                a=true;
                  
                        }
                             catch (FileNotFoundException e)
                                {
                              System.out.println("Error al crear el fichero." + e.getMessage());
                                 }
                             catch (IOException e)
                              {
                             System.out.println("Error al escribir el fichero."+ e.getMessage());
                          }
                      }
                 st.close();
                  conexion.setAutoCommit(true);
                 conexion.close();
                   
                            }catch(Exception error){
                            System.out.println("Error en el acceso a BD: " + error.getMessage());
                            error.printStackTrace();
                            }
                            
        
        return true;
    }
    
public static boolean doExportarBusquedaPersonaPOI(Persona persona_a, String nombre_archivo){
        boolean a=false; 
         Connection conexion = null;
        ResultSet rs = null;       
        try{
                        conexion = ControladorBD.darConexionBD();
                       conexion.setAutoCommit(false);
                       conexion = ControladorBD.darConexionBD();                
                        CallableStatement st = conexion.prepareCall( "{call sp_buscarPersonaParametro(?,?,?,?)}");
                            st.setString(1, persona_a.getCodigoPersona());
                            st.setString(2, persona_a.getNivelPersona());
                            st.setString(3, persona_a.getPaternoPersona());
                            st.setString(4, persona_a.getMaternoPersona());
                            rs = st.executeQuery();     
                            if(rs.next()){
                             try
                            {
                //Se crea el libro Excel
                    Workbook workbook = new XSSFWorkbook();
                //Se crea una nueva hoja dentro del libro                        
                    Sheet worksheet = workbook.createSheet("PERSONA");
                    CreationHelper createHelper = workbook.getCreationHelper();
                    worksheet.autoSizeColumn((short) 0);                    
                    CellStyle cabeceraFont = workbook.createCellStyle();
                    cabeceraFont.setFillForegroundColor(IndexedColors.GOLD.getIndex());
		    cabeceraFont.setFillPattern(CellStyle.SOLID_FOREGROUND);
                    cabeceraFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cabeceraFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cabeceraFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderRight(CellStyle.BORDER_THIN);
                    cabeceraFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderTop(CellStyle.BORDER_THIN);
                    cabeceraFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setAlignment(CellStyle.ALIGN_CENTER);
                    cabeceraFont.setVerticalAlignment(CellStyle.ALIGN_CENTER);
                    Font  font = workbook.createFont();
                    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                    font.setFontName("Arial");
                    font.setItalic(true);
                    font.setFontHeightInPoints((short)10);
                    cabeceraFont.setFont(font);
                    cabeceraFont.setWrapText(true);
                            //new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
                    CellStyle cuerpoFont = workbook.createCellStyle();
                    cuerpoFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    CellStyle cuerpoFontDate = workbook.createCellStyle();
                    cuerpoFontDate.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
                    Row row1 = worksheet.createRow(0);                    
                    Cell cellA1 = row1.createCell(0);
                    cellA1.setCellValue("Codigo");
                    cellA1.setCellStyle(cabeceraFont);
                    Cell cellB1 = row1.createCell(1);
                    cellB1.setCellValue("Apellido Paterno");
                    cellB1.setCellStyle(cabeceraFont);  
                    Cell cellC1 = row1.createCell(2);
                    cellC1.setCellValue("Apellido Materno");
                    cellC1.setCellStyle(cabeceraFont);
                    Cell cellD1 = row1.createCell(3);
                    cellD1.setCellValue("Nombre");
                    cellD1.setCellStyle(cabeceraFont);     
                    Cell cellE1 = row1.createCell(4);
                    cellE1.setCellValue("Genero");
                    cellE1.setCellStyle(cabeceraFont); 
                    Cell cellF1 = row1.createCell(5);
                    cellF1.setCellValue("Pais");
                    cellF1.setCellStyle(cabeceraFont); 
                    Cell cellG1 = row1.createCell(6);
                    cellG1.setCellValue("Usuario");
                    cellG1.setCellStyle(cabeceraFont); 
                    Cell cellH1 = row1.createCell(7);
                    cellH1.setCellValue("Nivel");
                    cellH1.setCellStyle(cabeceraFont); 
                    
                    int i=1;
                           do{
                                Row rows = worksheet.createRow(i);                                
                                Cell cellA = rows.createCell(0);                                
                                cellA.setCellValue(createHelper.createRichTextString(rs.getString("codigoPersona")));
                                cellA.setCellStyle(cuerpoFont);
                                Cell cellB = rows.createCell(1);
                                cellB.setCellValue(createHelper.createRichTextString(rs.getString("paternoPersona")));
                                cellB.setCellStyle(cuerpoFont);  
                                Cell cellC = rows.createCell(2);
                                cellC.setCellValue(createHelper.createRichTextString(rs.getString("maternoPersona")));
                                cellC.setCellStyle(cuerpoFont);
                                Cell cellD = rows.createCell(3);
                                cellD.setCellValue(createHelper.createRichTextString(rs.getString("nombrePersona")));
                                cellD.setCellStyle(cuerpoFont);     
                                Cell cellE = rows.createCell(4);
                                cellE.setCellValue(createHelper.createRichTextString(rs.getString("generoPersona")));
                                cellE.setCellStyle(cuerpoFont); 
                                Cell cellF = rows.createCell(5);
                                cellF.setCellValue(createHelper.createRichTextString(rs.getString("paisPersona")));
                                cellF.setCellStyle(cuerpoFont); 
                                Cell cellG = rows.createCell(6);
                                cellG.setCellValue(createHelper.createRichTextString(rs.getString("codigoUsuario")));
                                cellG.setCellStyle(cuerpoFont); 
                                Cell cellH = rows.createCell(7);
                                cellH.setCellValue(createHelper.createRichTextString(rs.getString("nivelPersona")));
                                cellH.setCellStyle(cuerpoFont); 
                                
                                worksheet.setColumnWidth(0, 8000);//codigo
                                worksheet.setColumnWidth(1, 8000);//apellido paterno
                                worksheet.setColumnWidth(2, 8000);//apellido materno
                                worksheet.setColumnWidth(3, 8000);//nombre
                                worksheet.setColumnWidth(4, 8000);//genero
                                worksheet.setColumnWidth(5, 8000);//pais
                                worksheet.setColumnWidth(6, 8000);//usuario
                                worksheet.setColumnWidth(7, 8000);//nivel                                
                                i++;  
                               }while(rs.next());
                               String ruta=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/")+System.getProperty("file.separator")+"download"+System.getProperty("file.separator") + nombre_archivo;                               
                                File archi = new File(ruta);                
                                DataOutputStream out = new DataOutputStream(new FileOutputStream(archi));
                                workbook.write(out); 
                                out.close();                       
                                a=true;
                  
                        }
                             catch (FileNotFoundException e)
                                {
                              System.out.println("Error al crear el fichero." + e.getMessage());
                                 }
                             catch (IOException e)
                              {
                             System.out.println("Error al escribir el fichero."+ e.getMessage());
                          }
                      }
                 st.close();
                  conexion.setAutoCommit(true);
                 conexion.close();
                   
                            }catch(Exception error){
                            System.out.println("Error en el acceso a BD: " + error.getMessage());
                            error.printStackTrace();
                            }
        return true;
    }

/**
 * producto
 */
public static boolean doExportarBusquedaProductoPOI(Producto producto_a, String nombre_archivo){
        boolean a=false; 
         Connection conexion = null;
        ResultSet rs = null;       
        try{
                        conexion = ControladorBD.darConexionBD();
                       conexion.setAutoCommit(false);
                       conexion = ControladorBD.darConexionBD();                
                        CallableStatement st = conexion.prepareCall( "{call sp_buscarProductoParametro(?,?,?)}");
                            st.setString(1, producto_a.getNombreProducto());
                            st.setString(2, producto_a.getMotivoProducto());
                            st.setString(3, producto_a.getObjTipoProducto().getCodigoTipo());
                            rs = st.executeQuery();     
                            if(rs.next()){
                             try
                            {
                //Se crea el libro Excel
                    Workbook workbook = new XSSFWorkbook();
                //Se crea una nueva hoja dentro del libro                        
                    Sheet worksheet = workbook.createSheet("PRODUCTO");
                    CreationHelper createHelper = workbook.getCreationHelper();
                    worksheet.autoSizeColumn((short) 0);                    
                    CellStyle cabeceraFont = workbook.createCellStyle();
                    cabeceraFont.setFillForegroundColor(IndexedColors.GOLD.getIndex());
		    cabeceraFont.setFillPattern(CellStyle.SOLID_FOREGROUND);
                    cabeceraFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cabeceraFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cabeceraFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderRight(CellStyle.BORDER_THIN);
                    cabeceraFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setBorderTop(CellStyle.BORDER_THIN);
                    cabeceraFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cabeceraFont.setAlignment(CellStyle.ALIGN_CENTER);
                    cabeceraFont.setVerticalAlignment(CellStyle.ALIGN_CENTER);
                    Font  font = workbook.createFont();
                    font.setBoldweight(Font.BOLDWEIGHT_BOLD);
                    font.setFontName("Arial");
                    font.setItalic(true);
                    font.setFontHeightInPoints((short)10);
                    cabeceraFont.setFont(font);
                    cabeceraFont.setWrapText(true);
                            //new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, true);
                    CellStyle cuerpoFont = workbook.createCellStyle();
                    cuerpoFont.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFont.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFont.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFont.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFont.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFont.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    CellStyle cuerpoFontDate = workbook.createCellStyle();
                    cuerpoFontDate.setBorderBottom(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setBottomBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderLeft(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setLeftBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderRight(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setRightBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setBorderTop(CellStyle.BORDER_THIN);
                    cuerpoFontDate.setTopBorderColor(IndexedColors.BLACK.getIndex());
                    cuerpoFontDate.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
                    Row row1 = worksheet.createRow(0);                    
                    Cell cellA1 = row1.createCell(0);
                    cellA1.setCellValue("Codigo");
                    cellA1.setCellStyle(cabeceraFont);
                    Cell cellB1 = row1.createCell(1);
                    cellB1.setCellValue("Nombre");
                    cellB1.setCellStyle(cabeceraFont);  
                    Cell cellC1 = row1.createCell(2);
                    cellC1.setCellValue("Descripcion");
                    cellC1.setCellStyle(cabeceraFont);
                    Cell cellD1 = row1.createCell(3);
                    cellD1.setCellValue("Precio Soles");
                    cellD1.setCellStyle(cabeceraFont);     
                    Cell cellE1 = row1.createCell(4);
                    cellE1.setCellValue("Precio Dolares");
                    cellE1.setCellStyle(cabeceraFont); 
                    Cell cellF1 = row1.createCell(5);
                    cellF1.setCellValue("Stock");
                    cellF1.setCellStyle(cabeceraFont); 
                    Cell cellG1 = row1.createCell(6);
                    cellG1.setCellValue("Motivo");
                    cellG1.setCellStyle(cabeceraFont); 
                    Cell cellH1 = row1.createCell(7);
                    cellH1.setCellValue("Estado");
                    cellH1.setCellStyle(cabeceraFont); 
                    Cell cellI1 = row1.createCell(8);
                    cellI1.setCellValue("Tipo");
                    cellI1.setCellStyle(cabeceraFont);
                    
                    int i=1;
                           do{
                                Row rows = worksheet.createRow(i);                                
                                Cell cellA = rows.createCell(0);                                
                                cellA.setCellValue(createHelper.createRichTextString(rs.getString("codigoProducto")));
                                cellA.setCellStyle(cuerpoFont);
                                Cell cellB = rows.createCell(1);
                                cellB.setCellValue(createHelper.createRichTextString(rs.getString("nombreProducto")));
                                cellB.setCellStyle(cuerpoFont);  
                                Cell cellC = rows.createCell(2);
                                cellC.setCellValue(createHelper.createRichTextString(rs.getString("descripcionProducto")));
                                cellC.setCellStyle(cuerpoFont);
                                Cell cellD = rows.createCell(3);
                                cellD.setCellValue(createHelper.createRichTextString(rs.getString("precioSolesProducto")));
                                cellD.setCellStyle(cuerpoFont);     
                                Cell cellE = rows.createCell(4);
                                cellE.setCellValue(createHelper.createRichTextString(rs.getString("precioDolaresProducto")));
                                cellE.setCellStyle(cuerpoFont); 
                                Cell cellF = rows.createCell(5);
                                cellF.setCellValue(createHelper.createRichTextString(rs.getString("stockProducto")));
                                cellF.setCellStyle(cuerpoFont); 
                                Cell cellG = rows.createCell(6);
                                cellG.setCellValue(createHelper.createRichTextString(rs.getString("motivoProducto")));
                                cellG.setCellStyle(cuerpoFont); 
                                Cell cellH = rows.createCell(7);
                                cellH.setCellValue(createHelper.createRichTextString(rs.getString("estadoProducto")));
                                cellH.setCellStyle(cuerpoFont); 
                                Cell cellI = rows.createCell(8);
                                cellI.setCellValue(createHelper.createRichTextString(rs.getString("nombreTipo")));
                                cellI.setCellStyle(cuerpoFont); 
                                
                                worksheet.setColumnWidth(0, 8000);//codigo
                                worksheet.setColumnWidth(1, 8000);//apellido paterno
                                worksheet.setColumnWidth(2, 8000);//apellido materno
                                worksheet.setColumnWidth(3, 8000);//nombre
                                worksheet.setColumnWidth(4, 8000);//genero
                                worksheet.setColumnWidth(5, 8000);//pais
                                worksheet.setColumnWidth(6, 8000);//usuario
                                worksheet.setColumnWidth(7, 8000);//nivel      
                                worksheet.setColumnWidth(8, 8000);//nivel   
                                i++;  
                               }while(rs.next());
                               String ruta=((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("/")+System.getProperty("file.separator")+"download"+System.getProperty("file.separator") + nombre_archivo;                               
                                File archi = new File(ruta);                
                                DataOutputStream out = new DataOutputStream(new FileOutputStream(archi));
                                workbook.write(out); 
                                out.close();                       
                                a=true;
                  
                        }
                             catch (FileNotFoundException e)
                                {
                              System.out.println("Error al crear el fichero." + e.getMessage());
                                 }
                             catch (IOException e)
                              {
                             System.out.println("Error al escribir el fichero."+ e.getMessage());
                          }
                      }
                 st.close();
                  conexion.setAutoCommit(true);
                 conexion.close();
                   
                            }catch(Exception error){
                            System.out.println("Error en el acceso a BD: " + error.getMessage());
                            error.printStackTrace();
                            }
        return true;
    }


}
